package com.itlong.cloud.property.dao;

import com.itlong.cloud.POJO.DTO.app.AppElevatorAuthDTO;
import com.itlong.cloud.POJO.DTO.property.AppUserGetUserDetailsDTO;
import com.itlong.cloud.POJO.DTO.property.CheckAppUserDTO;
import com.itlong.cloud.POJO.DTO.sdk.CloudFaceApiDTO;
import com.itlong.cloud.POJO.PO.AppUserInfoPO;
import com.itlong.cloud.POJO.PO.DeviceEntranceAuthPO;
import com.itlong.cloud.POJO.VO.sdk.SDKFaceUserInfoGetVO;
import com.itlong.cloud.abstracts.IAbstractBaseDao;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Map;

/**
 * <desc>
 *      物业系统用户信息数据访问接口
 * </desc>
 * @createDate 2017/09/19
 */
@Mapper
@Repository
public interface IPropertyAppUserInfoDao extends IAbstractBaseDao<AppUserInfoPO>{
    /**
     * <desc>
     *      检测用户是否是项目中
     * </desc>
     *
     * @param phoneNum
     * @param projectId
     * @param roomId
     * @return
     * @author Jiaqi.X
     * @createDate 2020/03/19
     */
    Map<String, Object> checkUserInProject(@Param("phoneNum") String phoneNum,@Param("projectId") String projectId,@Param("roomId") String roomId);

    /**
     * <desc>
     *      保存用户信息
     * </desc>
     * @param params
     * @return
     * @author zhangs
     * @createDate 2017/09/19
     */
    Integer save(Map<String, Object> params);

    /**
     * <desc>
     *      更新用户信息
     * </desc>
     * @param appUserInfoPO App用户实体对象
     * @return Integer
     * @author zhangs
     * @createDate 2017/09/26
     */
    Integer update(AppUserInfoPO appUserInfoPO);

    /**
     * <desc>
     *      根据id获取用户信息
     * </desc>
     * @param params
     * @return
     * @author zhangs
     * @createDate 2017/09/19
     */
    AppUserGetUserDetailsDTO getUserById(Map<String, Object> params);

    /**
     * <desc>
     *      根据手机号查询App用户信息
     * <desc/>
     *
     * @param @param params
     * @return List<AppUserInfoPO> 住户信息集
     * @author zhangs
     * @createDate 2017/09/26
     */
    List<AppUserInfoPO> getUserInfoByPhoneNum(Map<String, Object> params);

    /**
     * <desc>
     *      添加App用户信息前判断用户是否存在
     * <desc/>
     *
     * @param @param params
     * @return Integer 数据数量
     * @author zhangs
     * @createDate 2017/09/26
     */
    Integer getUserCountByPhoneNum(Map<String, Object> params);

    /**
     * <desc>
     *      查询用户信息
     * </desc>
     * @param checkAppUserDTO 查询App用户信息数据传输对象
     * @return  List<AppUserInfoPO> App用户信息实体对象
     * @author zhangs
     * @createDate 2017/09/19
     */
    List<AppUserInfoPO> getUserList(CheckAppUserDTO checkAppUserDTO);

    /**
     * <desc>
     *      根据id删除用户
     * </desc>
     * @param userIds App用户Id的List
     * @return MessageVO
     * @author zhangs
     * @createDate 2017/09/21
     */
    Integer userRemove(List<String> userIds);

    /**
     * <desc>
     *      设备授权-获取用户设备权限
     * <desc/>
     *
     * @param
     * @return MessageVO 标准格式化响应结果
     * @author zhangs
     * @createDate 2017/10/10
     */
    List<DeviceEntranceAuthPO> getUserDeviceAuth(Map<String, Object> params);

    /**
     * <desc>
     *      临时提供一个通过手机号码查询APP用户id接口
     * </desc>
     *
     * @param phoneNum
     * @return
     * @author wangzhi
     * @createDate 2018-04-18
     */
    String getAppUserIdTemporary(@Param("phoneNum") String phoneNum);

    /**
     * <desc>
     *      通过用户id获取用户手机号
     * </desc>
     *
     * @param userId 用户id
     * @return
     * @date 2017/11/25
     * @author Jiaqi.X
     * @createDate 2017/11/25
     */
    String getUserPhoneNumByUserId(@Param("userId") String userId);

    /**
     * <desc>
     *      根据用户id查询用户房间信息用于平板增量数据推送
     * </desc>
     *
     * @param userIds
     * @param projectId
     * @return
     * @author jiaqi.X
     * @createDate 2019/03/20
     */
    List<Map<String,Object>> getUserRoomIdsByUserIdAndProjectId(@Param("userIds") String[] userIds,
                                                                @Param("projectId") String projectId);

    /**
     * <desc>
     *      根据userId查询用户当前项目下有效的房间id集合
     * </desc>
     *
     * @param userId
     * @param projectId
     * @return
     * @author Jiaqi.X
     * @createDate 2019/03/25
     */
    List<String> getRoomIdsByUserIdAndProjectId(@Param("userId") String userId,@Param("projectId") String projectId);

    /**
     * <desc>
     *      修改用户信息
     * <desc/>
     *
     * @param dto
     * @return 房间类型
     * @author Qiang.S
     * @createDate 2019/11/05
     */
    Integer updateUserInfo(CloudFaceApiDTO dto);

    /**
     * <desc>
     *      查询人脸api用户信息
     * <desc/>
     *
     * @param params
     * @return 房间类型
     * @author Qiang.S
     * @createDate 2019/11/05
     */
    List<SDKFaceUserInfoGetVO> getUserInfoByPage(Map<String, Object> params);

    /**
     * <desc>
     *      查询人脸api用户信息数量
     * <desc/>
     *
     * @param params
     * @return 房间类型
     * @author Qiang.S
     * @createDate 2019/11/05
     */
    Integer getUserInfoPageCount(Map<String, Object> params);

    /**
     * <desc>
     *      查询有该机号的用户权限信息
     * </desc>
     *
     * @param projectId
     * @param userId
     * @return
     * @author Jiaqi.X
     * @createDate 2019/09/11
     */
    List<Map<String,Object>> getOldAllDoorAuthList(@Param("projectId") String projectId,@Param("userId") String userId);

    /**
     * <desc>
     *      查询有该机号的用户权限信息
     * </desc>
     *
     * @param projectId
     * @param userId
     * @return
     * @author Jiaqi.X
     * @createDate 2019/09/11
     */
    List<Map<String,Object>> oldAllElevatorAuthList(@Param("projectId") String projectId,@Param("userId") String userId);

    /**
     * <desc>
     *      查询有该机号的用户权限信息
     * </desc>
     *
     * @param projectId
     * @param userId
     * @return
     * @author Jiaqi.X
     * @createDate 2019/09/11
     */
    List<Map<String,Object>> oldAllTalkAuthList(@Param("projectId") String projectId,@Param("userId") String userId);

    /**
     * <desc>
     *      获取电梯临时权限
     * </desc>
     *
     * @param userId
     * @param projectId
     * @return
     * @author Jiaqi.X
     * @createDate 2019/09/11
     */
    List<AppElevatorAuthDTO> getPushFloorAuth(@Param("userId") String userId,@Param("projectId") String projectId);

    /**
     * <desc>
     *      通过userId获取用户数量
     * </desc>
     *
     * @param
     * @return
     * @Author Zhu.yj
     * @createDate  2021/1/20
     */
    List<AppUserInfoPO> getUserInfoByUserId(@Param("userId") String userId);

    /**
     *<desc>
     *      根据userid查询灵云token
     * <desc/>
     *
     * @param userId
     * @return
     * @author Jugaung.S
     * @createDate 2021/01/10
     */
    String getClientToken(@Param("userId") String userId);
}
